#include "debug.h"
#include <stdio.h>
#include <string.h>
#include "esp8266.h"

// 全局变量 - 存储当前心率值
int32_t Heart=0;

// 固定的AT命令
u8 string1[]="AT+RST\r\n";
u8 string2[]="AT+CWMODE=1\r\n";
u8 string3[]="AT+CWDHCP=1,1\r\n";
u8 string4[]="AT+CWJAP=\"K\",\"kkkk1111\"\r\n";
u8 string5[]="AT+MQTTUSERCFG=0,1,\"CH32_1\",\"DP1Fv9QOgA\",\"version=2018-10-31&res=products%2FDP1Fv9QOgA%2Fdevices%2FCH32_1&et=1758718179&method=md5&sign=1NZW9LBRsRTx310RddfiCg%3D%3D\",0,0,\"\"\r\n";
u8 string6[]="AT+MQTTCONN=0,\"mqtts.heclouds.com\",1883,1\r\n";
u8 string7[]="AT+MQTTSUB=0,\"$sys/DP1Fv9QOgA/CH32_1/thing/property/set\",1\r\n";

// 临时缓冲区用于构建消息
u8 message_buffer[256];

/**
 * @brief 初始化ESP8266模块
 */
void esp8266_init()
{
    Uart6_Init();
}

/**
 * @brief 更新全局心率值变量
 * @param heart_rate 新的心率值
 */
void update_heart_rate(int32_t heart_rate)
{
    Heart = heart_rate;  // 更新全局变量
    // 立即发送数据到云平台
    send_sensor_data();
}


///**
// * @brief 更新全局温度值变量
// * @param drop_rate 新的温度值
// */
//void update_temperature(void)
//{
//    Temperature = AHT20_Read_Temperature(); // 获取当前温度
//    // 立即发送数据到云平台
//    send_sensor_data();
//}

/**
 * @brief 发送当前的传感器数据到云平台
 */
void send_sensor_data()
{
    // 构建包含心率、滴速和温度的 MQTT 发布消息
    int len = sprintf((char*)message_buffer,
        "AT+MQTTPUB=0,\"$sys/DP1Fv9QOgA/CH32_1/thing/property/post\",\"{\\\"id\\\":\\\"123\\\"\\,\\\"params\\\":{\\\"Drip_rate\\\":{\\\"value\\\":%d}\\,\\\"Temperature\\\":{\\\"value\\\":%d}}}\",0,0\r\n",
        Drip_Velocity, Temperature);  // 添加温度数据，格式化为小数点后两位

    // 将消息发送到 ESP8266
    uart6_send_string(message_buffer, len);
}

/**
 * @brief 连接到OneNET云平台
 */
void onenet_init()
{
    uart6_send_string(string1,sizeof(string1)-1);
    Delay_Ms(500);
    uart6_send_string(string2,sizeof(string2)-1);
    Delay_Ms(500);
    uart6_send_string(string3,sizeof(string3)-1);
    Delay_Ms(1000);
    uart6_send_string(string4,sizeof(string4)-1);
    Delay_Ms(2000);
    uart6_send_string(string5,sizeof(string5)-1);
    Delay_Ms(2000);
    uart6_send_string(string6,sizeof(string6)-1);
    Delay_Ms(2000);
    uart6_send_string(string7,sizeof(string7)-1);
    Delay_Ms(2000);

    // 发送初始数据
    send_sensor_data();
}
